import pandas as pd

# 原始数据
data = {
    'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Department': ['HR', 'HR', 'IT', 'IT', 'Sales', 'Sales'],
    'Salary': [50000, 55000, 60000, 65000, 70000, 75000],
    'Experience': [5, 6, 3, 4, 10, 12]
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 将部门列转化为整数（使用 factorize()，会自动生成 0, 1, 2 等整数表示）
df['Department'] = pd.factorize(df['Department'])[0] + 1  # +1 使其从1开始

# 将 'Employee' 列设置为索引
df.set_index('Employee', inplace=True)

# 显示数据
print("原始数据:")
print(df)

# 按部门分组计算数值型列的均值
print("\n按部门分组求均值:")
print(df.groupby('Department').mean())
print("===========按部门分组求均值示例代码===========")

# 按部门分组计算总和
print("\n按部门分组求总和:")
print(df.groupby('Department').sum())
print("===========按部门分组求总和示例代码===========")

# 按部门分组计算最大值
print("\n按部门分组求最大值:")
print(df.groupby('Department').max())
print("===========按部门分组求最大值示例代码===========")

# 按部门分组计算最小值
print("\n按部门分组求最小值:")
print(df.groupby('Department').min())
print("===========按部门分组求最小值示例代码===========")

print("\n按部门分组非缺失值数量:")
print(df.groupby('Department').count())
print('===========按部门分组非缺失值数量示例代码===========')

# 按部门分组计算标准差
print("\n按部门分组求标准差:")
print(df.groupby('Department').std())
print("===========按部门分组求标准差示例代码===========")
# 按部门分组并使用 agg 函数
# 1. 计算 Value 的最大值减去最小值
result1 = df.groupby('Department')['Salary'].agg(lambda x: x.max() - x.min())
print("按部门分组求 Salary 最大值减去最小值:")
print(result1)
print("===========")

# 2. 分别计算 Salary 总和和 Experience 均值
result2 = df.groupby('Department').agg({'Salary': 'sum', 'Experience': 'mean'})
print("按部门分组求 Salary 总和和 Experience 均值:")
print(result2)
print("===========")